home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / New System Software Extensions / OpenDoc A6 / OpenDoc Parts Framework / OPF / Found / BCCollec / Structs / Queues / BCQue.h < prev    next >
Encoding:
Text File  |  1994-04-21  |  2.1 KB  |  107 lines  |  [TEXT/MPS ]

  1. //  The C++ Booch Components (Version 2.1)
  2. //  (C) Copyright 1990-1993 Grady Booch. All Rights Reserved.
  3. //
  4. //  BCQue.h
  5. //
  6. //  This file contains the declaration of the queue abstract base class
  7. //  and its iterators.
  8.  
  9. #ifndef BCQUE_H
  10. #define BCQUE_H 1
  11.  
  12. #include "BCType.h"
  13.  
  14. template<class Item>
  15. class BC_TQueueActiveIterator;
  16.  
  17. template<class Item>
  18. class BC_TQueuePassiveIterator;
  19.  
  20. template<class Item, class Structure>
  21. class BC_TPersist;
  22.  
  23. // Queue abstract base class
  24.  
  25. template<class Item>
  26. class BC_TQueue {
  27. public:
  28.  
  29.   BC_TQueue();
  30.   BC_TQueue(const BC_TQueue<Item>&);
  31.   virtual ~BC_TQueue();
  32.  
  33.   virtual BC_TQueue<Item>& operator=(const BC_TQueue<Item>&);
  34.   virtual BC_Boolean operator==(const BC_TQueue<Item>&) const;
  35.   BC_Boolean operator!=(const BC_TQueue<Item>&) const;
  36.   
  37.   virtual void Clear() = 0;
  38.   virtual void Append(const Item&) = 0;
  39.   virtual void Pop() = 0;
  40.   virtual void Remove(BC_Index at) = 0;
  41.  
  42.   virtual BC_Index Length() const = 0;
  43.   virtual BC_Boolean IsEmpty() const = 0;
  44.   virtual const Item& Front() const = 0;
  45.   virtual Item& Front() = 0;
  46.   virtual BC_ExtendedIndex Location(const Item&) const = 0;
  47.  
  48. protected:
  49.  
  50.   virtual void Purge() = 0;
  51.   virtual void Add(const Item&) = 0;
  52.   virtual BC_Index Cardinality() const = 0;
  53.   virtual const Item& ItemAt(BC_Index) const = 0;
  54.  
  55.   virtual void Lock();
  56.   virtual void Unlock();
  57.  
  58. private:
  59.  
  60.   friend class BC_TQueueActiveIterator<Item>;
  61.   friend class BC_TQueuePassiveIterator<Item>;
  62.   
  63.   friend class BC_TPersist<Item, BC_TQueue<Item> >;
  64.  
  65. };
  66.  
  67. // Queue iterators
  68.  
  69. template <class Item>
  70. class BC_TQueueActiveIterator {
  71. public:
  72.  
  73.   BC_TQueueActiveIterator(const BC_TQueue<Item>&);
  74.   ~BC_TQueueActiveIterator();
  75.   
  76.   void Reset();
  77.   BC_Boolean Next();
  78.  
  79.   BC_Boolean IsDone() const;
  80.   const Item* CurrentItem() const;
  81.   Item* CurrentItem();
  82.   
  83. protected:
  84.  
  85.   const BC_TQueue<Item>& fQueue;
  86.   BC_ExtendedIndex fIndex;
  87.   
  88. };
  89.  
  90. template <class Item>
  91. class BC_TQueuePassiveIterator {
  92. public:
  93.  
  94.   BC_TQueuePassiveIterator(const BC_TQueue<Item>&);
  95.   ~BC_TQueuePassiveIterator();
  96.   
  97.   BC_Boolean Apply(BC_Boolean (*)(const Item&));
  98.   BC_Boolean Apply(BC_Boolean (*)(Item&));
  99.   
  100. protected:
  101.  
  102.   const BC_TQueue<Item>& fQueue;
  103.  
  104. };
  105.  
  106. #endif
  107.